<?php

class OrderController extends Controller
{
    public function view($params)
    {
        if (!UserController::isLogged()) {
            App::redirect('dang-nhap/don-dat-hang');
            exit();
        }
        $params = $this->dispatch($params);
        $page = $params['page'];

        $this->assign('page_state', $params['function']);

        $filter = 0;
        if (!UserController::isLogged()) {
            App::setException('Vui lòng đăng nhập trước khi thực hiện chức năng này!', 'don-dat-hang');
        } elseif (!UserController::isLoggedAdmin()) {
            $filter = Order::FILTER_BY_USER_ID;
        }

        if ($params['function'] == 'chua-xac-nhan') {
            $filter |= Order::FILTER_NOT_CONFIRMED;
        }

        if ($params['function'] == 'chua-giao-hang') {
            $filter |= Order::FILTER_NOT_DELIVERED;
        }

        $data = Order::getOrders($filter, UserController::getLoggedUser('user_id'));


        if (count($data) > 0) {
            $paging = new Paging($data, $page,
                Loader::getConfig('paging', 'records_per_page'),
                Loader::getConfig('paging', 'pages_display'));
            $paging->dispatch();

            if ($page > $paging->totalPages) {
                App::redirect('don-dat-hang/trang-' . $paging->currentPage);
            }
            $data = array_slice($data, $paging->lowOffsetRecord, $paging->highOffsetRecord - $paging->lowOffsetRecord + 1);

            $this->assign('stt_offset', $paging->lowOffsetRecord);
            $this->assign('list_orders', $data);


            $baseHref = 'don-dat-hang/' . ($params['function'] == 'tat-ca' ? '' : $params['function'] . '/') . 'trang-';
            $pagesList = $paging->pagesList($baseHref);
            $this->assign('pages_list', $pagesList );
        }
    }

    private function dispatch($params)
    {
        $result = array();
        if (preg_match('#^trang-(\d+)$#', $params, $match)) {
            $result['function'] = 'tat-ca';
            $result['page'] = $match[1];
        } elseif (preg_match('#(?P<func>[\w-]+)(?:\/trang-(?P<page>\d+))?#', $params, $match)) {
            $result['function'] = isset($match['func']) ? $match['func'] : 'tat-ca';
            $result['page'] = isset($match['page']) ? $match['page'] : 1;
        } else {
            $result = array(
                'function' => 'tat-ca',
                'page' => 1
            );
        }

        return $result;
    }

    public function detail($id)
    {
        $this->assign('order_id', $id);
        $this->assign('order_detail', Order::getOrderDetail($id));
    }

    public function delete()
    {
        if (UserController::isLoggedAdmin() && App::isAjaxRequest() && isset($_POST['id'])) {
            Order::delete($_POST['id']);
            $this->assign('code', 0);
        } elseif (!isset($_POST['id'])) {
            $this->assign('code', -1);
        } else {
            App::setException('Không thể truy xuất trực tiếp chức năng này');
        }
    }

    public function confirm()
    {
        if (UserController::isLoggedAdmin() && App::isAjaxRequest() && isset($_POST['id'])) {
            Order::confirm($_POST['id']);
            $this->assign('code', 0);
        } elseif (!isset($_POST['id'])) {
            $this->assign('code', -1);
        } else {
            App::setException('Không thể truy xuất trực tiếp chức năng này');
        }
    }

    public function deliver()
    {
        if (UserController::isLoggedAdmin() && App::isAjaxRequest() && isset($_POST['id'])) {
            Order::deliver($_POST['id']);
            $this->assign('code', 0);
        } elseif (!isset($_POST['id'])) {
            $this->assign('code', -1);
        } else {
            App::setException('Không thể truy xuất trực tiếp chức năng này');
        }
    }
}